home *** CD-ROM | disk | FTP | other *** search
/ Mac Power 1998 March / MACPOWER-1998-03.ISO.7z / MACPOWER-1998-03.ISO / インターネット/通信 / Netscape Communicator Folノ.sea / Netscape Communicator Folder / Netscape Communicator™.rsrc / TEXT_3000_initprefs.txt < prev    next >
Text File  |  1997-09-08  |  8KB  |  372 lines

  1. // Style note 3/3:
  2. // internal objects & functions are in under_score form.
  3. // public functions are in interCaps.
  4.  
  5. var bAnyPrefLocked = false;
  6.  
  7. // --- Preference objects ---
  8. function preference(default_value) {
  9.     this.default_value = default_value;
  10.     this.user_value = null;
  11.     this.locked = false;
  12. };
  13.  
  14. function pref_array(parent) {
  15.     this.parent = parent;
  16. };
  17.  
  18. function plat() {
  19.     this.windows=false;
  20.     this.mac=false;
  21.     this.unix=false;
  22. };
  23.  
  24. platform = new plat();
  25.  
  26. // --- Preference initialization functions ---
  27. //  -- Pass a string and value to a pref function, e.g.
  28. //      user_pref("browser.startup.homepage", "abc");
  29. //  -- It parses the string and defines branches of the prefs
  30. //      object as necessary.
  31. //  -- Note assumptions:
  32. //      Root of the tree is prefs.
  33. //      Every branch is a pref_array and leaves are preference objects.
  34. //
  35. function next_field(str, index)
  36. {
  37.     var i = str.indexOf('.', index);
  38.     if (i == -1)
  39.         i = str.length;
  40.     return str.substring(index, i)
  41. }
  42.  
  43. function init_prefarray(prefix, name, parent)
  44. {
  45.     if (typeof(prefix[name]) == "undefined") {
  46.         // --ML mime-type hack requiring knowledge of array structure...
  47.         if (parent == "mime" || parent == "static_mime")
  48.             prefix[name] = new mime_type1(prefix);
  49.         else
  50.             prefix[name] = new pref_array(prefix);
  51.     }
  52. }
  53.  
  54. function init_pref(prefix, name)
  55. {
  56.     if (typeof(prefix[name]) == "undefined")
  57.         prefix[name] = new preference(null);
  58. }
  59.  
  60. // returns the preference object named by prefname
  61. function init_preftree(prefname)
  62. {
  63.     var index = 0;
  64.     var prefix = prefs;
  65.     var parent = "";
  66.     while (index < prefname.length)
  67.     {
  68.         field = next_field(prefname, index);
  69.         index = index + field.length + 1;
  70.         
  71.         if (index >= prefname.length) {
  72.             init_pref(prefix, field);
  73.         }
  74.         else {
  75.             init_prefarray(prefix, field, parent);
  76.         }
  77.         prefix = prefix[field];
  78.         parent = field;
  79.     }
  80.     return prefix;
  81. }
  82.  
  83. // Set to trigger callbacks when setting preferences
  84. var callbacks_enabled = false;
  85.  
  86. // These functions are exported
  87. function pref(prefname, value)
  88. {
  89.     var pref = init_preftree(prefname);
  90.     pref.default_value = value;
  91. }
  92.  
  93. // These three for use by autoconfig file
  94. function defaultPref(prefname, value)
  95. {
  96.     // This routine no longer unlocks the pref
  97.     var pref = init_preftree(prefname);
  98.     var changed = pref.default_value != value &&
  99.         (pref.user_value == null || pref.locked);
  100.     
  101.     pref.default_value = value;
  102.     
  103.     if (callbacks_enabled && changed)
  104.         pref_changed(prefname);
  105. }
  106.  
  107. function lockPref(prefname, value)
  108. {
  109.     // Set default pref and lock it
  110.     var pref = init_preftree(prefname);
  111.     var changed = !pref.locked || pref.default_value != value;
  112.     
  113.     pref.default_value = value;
  114.     pref.locked = true;
  115.  
  116.     if (bAnyPrefLocked == false && changed) {
  117.         bAnyPrefLocked = true;
  118.         prefLocked();
  119.     }
  120.  
  121.     if (callbacks_enabled && changed) {
  122.         pref_changed(prefname);
  123.     }
  124. }
  125.  
  126. function unlockPref(prefname)
  127. {
  128.     var pref = init_preftree(prefname);
  129.     var changed = pref.locked;
  130.     
  131.     pref.locked = false;
  132.  
  133.     if (callbacks_enabled && changed)
  134.         pref_changed(prefname);
  135. }
  136.  
  137. function getPref(prefname)
  138. {
  139.     var pref = init_preftree(prefname);
  140.     return get_user_pref(pref);
  141. }
  142.  
  143. // 'user_pref' was used in public b2 so keep it
  144. function user_pref(prefname, value)
  145. {
  146.     var pref = init_preftree(prefname);
  147.     if (pref.user_value != value) {
  148.         pref.user_value = value;
  149.         if (callbacks_enabled && !pref.locked)
  150.             pref_changed(prefname);
  151.     }
  152. }
  153.  
  154. // stubs for compatability
  155. var default_pref = defaultPref;
  156. var lock_pref = lockPref;
  157. var unlock_pref = unlockPref;
  158. var userPref = user_pref;
  159.  
  160. // -------------------------
  161. prefs = new pref_array(null); 
  162.  
  163.  
  164. // -------------------------
  165. function mime_type1(parent)
  166. {
  167.     this.parent = parent;
  168.     this.mimetype = new preference("");
  169.     this.extension = new preference("");
  170.     this.load_action = new preference(0);
  171.     this.mac_appname = new preference("");
  172.     this.mac_appsig = new preference("????");
  173.     this.mac_filetype = new preference("????");
  174.     this.mac_plugin_name = new preference("");
  175.     this.description = new preference("");
  176.     this.latent_plug_in = new preference(false);
  177. }
  178.  
  179. function mime_type(root, mimetype, extension, load_action, appname, appsig, filetype)
  180. {
  181.     init_preftree(root + ".mimetype");
  182.     var mime = init_preftree(root);
  183.  
  184.     mime.mimetype.default_value = mimetype;
  185.     mime.extension.default_value = extension;
  186.     mime.load_action.default_value = load_action;
  187.     mime.mac_appsig.default_value = appsig;
  188.     mime.mac_appname.default_value = appname;
  189.     mime.mac_filetype.default_value = filetype;
  190. }
  191.  
  192. // ---
  193. // This is like the func in prefapi, to escape ¥ and "
  194. function str_escape(str)
  195. {
  196.     var outstr = "";
  197.     var next = 0;
  198.     while (next < str.length) {
  199.         var c1 = str.indexOf('¥¥', next); 
  200.         var c2 = str.indexOf('¥"', next);
  201.         if (c1 == -1 && c2 == -1) {
  202.             outstr += str.substring(next, str.length);
  203.             next = str.length;
  204.         }
  205.         else {
  206.             var start = next;
  207.             if (c1 == -1)
  208.                 next = c2;
  209.             else if (c2 == -1)
  210.                 next = c1;
  211.             else
  212.                 next = Math.min(c1, c2);
  213.             outstr += str.substring(start, next) + "¥¥" + str.charAt(next);
  214.             next++;
  215.         }
  216.     }
  217.     return outstr;
  218. }
  219.  
  220. function save_uservals(obj, obj_name)
  221. {
  222.     var result = ""; 
  223.     var bGroup = false; 
  224.     var eol = "¥r";
  225.  
  226.     if (platform.windows) eol = "¥n";
  227.  
  228.     for (var i in obj) {
  229.        if (i == "parent") bGroup = true; 
  230.         if (i != "parent") {
  231.            if ((i == "user_value") && (obj[i] != null) &&
  232.                   (obj.user_value != obj.default_value))
  233.             {
  234.                 result += "user_pref(¥"" + obj_name + "¥", ";
  235.                 
  236.                 if (typeof(obj[i]) == "string")
  237.                     result += "¥"" + str_escape(obj[i]) + "¥");";
  238.                 else
  239.                     // number or boolean
  240.                     result += obj[i] + ");";
  241.                 result += eol;
  242.             }
  243.             if (bGroup) {
  244.                 if (obj_name.length == 0)
  245.                     result += save_uservals(obj[i], i);
  246.                 else
  247.                     result += save_uservals(obj[i], obj_name + "." + i);
  248.             }
  249.         }
  250.     }
  251.     return result; 
  252. }
  253.  
  254. // -- For building child iterator
  255. function get_children(node, nodename)
  256. {
  257.     var result = "";
  258.     for (var i in node) {
  259.         if (i != "parent" && node[i] != null) {
  260.             result += nodename + "." + i + ";"
  261.         }
  262.     }
  263.     return result;
  264. }
  265.  
  266. // -- Admin Kit support --
  267. configs = new pref_array(null);
  268.  
  269. function config(param, value)
  270. {
  271.     init_configtree(param, value);
  272. }
  273.  
  274. function init_configtree(param, value)
  275. {
  276.     var index = 0;
  277.     var prefix = configs;
  278.     while (index < param.length)
  279.     {
  280.         field = next_field(param, index);
  281.         index = index + field.length + 1;
  282.         
  283.         if (index >= param.length && value != null) {
  284.             prefix[field] = value;
  285.         }
  286.         else if (typeof(prefix[field]) == "undefined") {
  287.             if (value != null)
  288.                 prefix[field] = new pref_array(prefix);
  289.             else
  290.                 return null;
  291.         }
  292.         prefix = prefix[field];
  293.     }
  294.     return prefix;
  295. }
  296.  
  297. // -- These functions are called from within prefapi.c
  298. // -- Returns true iff the pref's value has changed.
  299. // (Set creates the pref if necessary; Get assumes it already exists)
  300. function set_user_pref(prefname, value)
  301. {
  302.     var pref = init_preftree(prefname);
  303.     
  304.     if (pref.locked)
  305.         return false;
  306.         
  307.     if (pref.default_value == value) {
  308.         if (pref.user_value == null)
  309.             return false;
  310.         else {
  311.             pref.user_value = null;
  312.             return true;
  313.         }
  314.     }
  315.     
  316.     if (pref.user_value == value) {
  317.         return false;
  318.     } else {
  319.         pref.user_value = value;
  320.         return true;
  321.     }
  322. }
  323.  
  324. function get_user_pref(obj)
  325. {
  326.     if (obj.locked || obj.user_value == null) {
  327.         return obj.default_value;
  328.     }
  329.     else {
  330.         return obj.user_value;
  331.     }
  332. }
  333.  
  334. function set_default_user_pref(prefname, value)
  335. {
  336.     var pref = init_preftree(prefname);
  337.     
  338.     if (!pref.locked && pref.default_value != value) {
  339.         pref.default_value = value;
  340.         return true;
  341.     }
  342.     return false;
  343. }
  344.  
  345. function get_config(param)
  346. {
  347.     return init_configtree(param, null);
  348. }
  349.  
  350. // LDAP
  351. // Searches for "key=value" in the given string and returns value.
  352. function getLDAPValue(str, key)
  353. {
  354.     if (str == null || key == null)
  355.         return null;
  356.         
  357.     var search_key = "¥n" + key + "=";
  358.  
  359.     var start_pos = str.indexOf(search_key);
  360.     if (start_pos == -1)
  361.         return null;
  362.         
  363.     start_pos += search_key.length;
  364.         
  365.     var end_pos = str.indexOf("¥n", start_pos);
  366.     if (end_pos == -1)
  367.         end_pos = str.length;
  368.     
  369.     return str.substring(start_pos, end_pos);
  370. }
  371.  
  372.